\section{Detailed Design}
\fancyfoot[C]{Detailed Design}
\subsection{Database Entities}

\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{DatabaseTableDiagram.eps}
  \caption{A diagram outlining the Content and Field table layout in the CMS' Data Layer.}
\label{fig:DatabaseTableDiagram}
\end{figure}
%todo: user/type/role tables

\subsubsection{Content Type}
\begin{tabular}{| c || c | l |} 
\hline
\multicolumn{3}{|c|}{Content Type} \\
\hline
Variable & Type & Description \\ \hline
CTID & UID & A unique identifier for the Content Type.\\ \hline
value & text & An identifying name for the Content Type.\\ \hline
\end{tabular}
\linebreak

\subsubsection{Field Type}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Field Type} \\
\hline
Variable & Type & Description \\ \hline
FTID & UID & A unique identifier for the Field Type.\\ \hline
value & text & An identifying name for the Content Type.\\ \hline
\end{tabular}
\linebreak

\subsubsection{Field}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Field} \\
\hline
Variable & Type & Description \\ \hline
FID & UID & A unique identifier for the Field.\\ \hline
FTID & Field Type & A reference to the Field Type that this Field is derived from.\\ \hline
CTID & Content Type & A reference to the Content Type this Field belongs to.\hbreak
\end{tabular}
\linebreak

\subsubsection{Field Value}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Field Value} \\
\hline
Variable & Type & Description \\ \hline
CID & Content & References to the Content that use this Field Value.\\ \hline
value & data & Information contained by the Field Type.\\ \hline
FID & Field & Reference to the Field that this Field Value is derived from. \\ \hline
\end{tabular}
\linebreak

\subsubsection{Content}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Content} \\
\hline
CID & UID & A unique identifier for the Content entity.\\ \hline
CTID & Content Type & A reference to the Content Type that this Content is derived from. \\ \hline
\end{tabular}
\linebreak

\subsubsection{Display}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Display} \\
\hline
Name & Type & Description\\ \hline \hline
DID & UID & A unique identifier for the Display entity. \hbreak
CTID & Content Type & A reference to the Content Type that this Display is mated to.\hbreak
Location & String & The location of the Display's files. CMS-relative.\hbreak
\end{tabular}
\linebreak
\vspace{2em}


\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{UserRoleDataDiagram.eps}
  \caption{A diagram outlining the User and Role table layout in the CMS' Data Layer.}
\label{fig:UserRoleDataDiagram}
\end{figure}

\subsubsection{Role}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Role} \\
\hline
RID & UID & A unique identifier for the Role entity.\\ \hline
Role & String & A reference to a Role defined in the CMS's business layer. \\ \hline
\end{tabular}
\linebreak

\subsubsection{User}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{User} \\
\hline
USRID & UID & A unique identifier for the User entity.\\ \hline
ID & String & A human-readable identifier for the User.\\ \hline
\end{tabular}
\linebreak

\subsection{Content-Related Class Design}

\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{UserClassDiagram.eps}
  \caption{A diagram outlining the relationships between Roles, Users, and User Types.}
\label{fig:UserClassDiagram}
\end{figure}

\subsubsection{CMSRole}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSRole \req{3.2.2, 3.2.4}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSRole.\\ \hline
Name & String & The CMSRole's publically-visible name on the CMS.\\ \hline
Ability & String & The CMS permission the Role is concerned with.\hbreak
\end{tabular}

\subsubsection{User Type}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{User Type \req{3.2.2}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the User Type.\\ \hline
Name & String & The User Type's human-readable identifier.\\ \hline
Roles & Role[] & The abilities allotted to the User Type.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{HasRole(Role R)} \\
\hline
Input & R: A Rule.\hbreak
Output & True if the Role is found in the User Type, False otherwise.\\ \hline
Description & Way to quickly check if a User has a specific Role enabled.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{AddUser(User U)} \\
\hline
Input & U: The User to have the specific User Type.\hbreak
Output & Sets the User's User Type, makes it an entry under this User Type's table in the data layer.\\ \hline
Description & User role management.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{RemoveUser(User U)} \\
\hline
Input & name: The User to lose the specific User Type.\hbreak
Output & Removes the User from the User Type's, removes the User Type from the User.\\ \hline
Description & User role management.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{User}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{User \req{3.2.3}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the User.\\ \hline
Name & String & The user's publically-visible name on the CMS.\\ \hline
Type & User Type & The user's access/ability settings on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}
\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{HasRole(User U)} \\
\hline
Input & U: A User.\hbreak
Output & True if the Role is found in the User, False otherwise.\\ \hline
Description & Calls User.Type.HasRole(R).\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{ContentFieldClassDiagram.eps}
  \caption{A diagram outlining the relationships between Roles, Users, and User Types.}
\label{fig:ContentFieldClassDiagram}
\end{figure}

\subsubsection{FieldType}\label{class:fieldtype}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{FieldType \req{3.3.3}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Field Type.\\ \hline
Name & String & The Field Type's publically-visible name on the CMS.\\ \hline
Value & String & The name of the Field Type's value type.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{Field}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Field \req{3.3.3}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Field.\\ \hline
Name & String & The Field's publically-visible name on the CMS.\\ \hline
Value & String & The name of the Field's value type.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{Field Value}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Field Value \req{3.3.3}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Field Value.\\ \hline
Name & String & The Field Value's publically-visible name on the CMS.\\ \hline
Value & Object & The Field Value's held data. See (\ref{class:fieldtype}).\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{Content Type}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{ContentType \req{3.3.1}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Content Type.\\ \hline
Name & String & The Content Type's publically-visible name on the CMS.\\ \hline
Fields & long[ ] & The Fields associated with this Content Type.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{Content}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Content \req{3.3.2}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Content.\\ \hline
Name & String & The Content's publically-visible name on the CMS.\\ \hline
CTYPE & long & The Content's Content Type reference.\\ \hline
Fields & Field Value[] & The Field Values associated with the Content. \req{3.3.2}\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetField(int i)} \\
\hline
Input & i: An index within Content.Fields.\hbreak
Output & The Field Value at the location in Fields; throws an exception otherwise.\\ \hline
Description & Used by the CMS when building web pages.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsection{Data Layer}

\subsubsection{CMSDbDataHelper}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSDbDataHelper \req{3.5.5, 3.5.6}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSDbDataHelper placeholder.\\ \hline
Name & String & The CMSDbDataHelper's publically-visible name on the CMS.\\ \hline
DBInfo & DataTable & Additional information about particular types of databases needed by DBDataLayer.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetHelpFor(String DBType)} \\
\hline
Input & DBType: The name of a data storage apparatus.\hbreak
Output & Void\\ \hline
Description & The DBHelper updates on DBInfo, giving it information CMSDbDataLayer uses.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSDbDataLayer}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSDbDataLayer \req{3.5.2, 3.5.3, 3.5.4, 3.5.5, 3.5.6}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSDbDataLayer.\\ \hline
Name & String & The CMSDbDataLayer's publically-visible name on the CMS.\\ \hline
Query & String & Contains the upcoming query.\\ \hline
NotQuery & bool & Indicates whether the next query is a non-query (UPDATE or INSERT).\\ \hline
Data & DataTable & The data retrieved from the most recent query.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{ExecuteQuery()} \\
\hline
Input & Void\hbreak
Output & CMSDbDataLayer updates Data with the results of the query.\\ \hline
Description & The query mechanism for the CMSDbDataLayer.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSHeader}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSHeader \req{3.5.5, 3.5.6}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSHeader placeholder.\\ \hline
Name & String & The CMSHeader's publically-visible name on the CMS.\\ \hline
SQLString & String & The query used by the Data Layer to get data for the Header.\\ \hline
Label & String & Text for the label portion of the Header.\\ \hline
InternalWidth & Unit & Width of the Header.\\ \hline
InternalHeight & Unit & Height of the Header.\\ \hline
HasErrors & bool & Gets a value indicating whether this instance has errors.\hbreak
Errors & String[] & Lists any errors generated by the Header.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsection{CMS Business Logic}

\subsubsection{CMSAccessParameter}
Used to store access abilities/blocks for User/User Type for any piece of Content or a Content Type.\newline
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSAccessParameter} \\
\hline
Name & Type & Description\\ \hline \hline
UID & long & Reference to a User or User Type. \hbreak
CID & long & Reference to a Content or Content Type. \hbreak
blocked & boolean & True if User/User type may not see the Content/Content Type, false otherwise.\hbreak
\end{tabular}
\linebreak
\vspace{2em}


\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{PipelineClassDiagram.eps}
  \caption{A diagram outlining the relationship between the CMSPipeline class and the CMSLogic class.}
\label{fig:PipelineClassDiagram}
\end{figure}

\subsubsection{CMSLogic}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSLogic} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSLogic.\\ \hline
Name & String & The CMSLogic's publically-visible name on the CMS.\\ \hline
Line & CMSPipeline[] & The chain of CMSPipelines making up the CMSLogic.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{AddPipeline(CMSPipeline P)} \\
\hline
Input & P: A CMSPipeline containing business logic.\hbreak
Output & Adds the CMSPipeline to the CMSLogic structure.\\ \hline
Description & Used to augment existing logic.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{RemovePipeline(int i)} \\
\hline
Input & i: an index to a CMSPipeline.\hbreak
Output & Removes the CMSPipeline from the CMSLogic structure.\\ \hline
Description & Used to modify existing logic.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{ExecuteLogic(DataTable datain)} \\
\hline
Input & datain: Input data for the CMSPipelines.\hbreak
Output & Returns the collective result of each CMSPipeline acting on the Pipeline.\\ \hline
Description & The main way to execute business logic.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSPipeline \req{3.2.4}}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSPipeline} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Pipeline.\\ \hline
Name & String & The Pipeline's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{ExecutePipeline(DataTable datain)} \\
\hline
Input & datain: Input data for the CMSPipeline.\hbreak
Output & Returns the result of this CMSPipeline acting on the DataTable.\\ \hline
Description & The main way to execute business logic.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{figure}[!ht]
  \centering
    \includegraphics[width=4in]{PluginClassDiagram.eps}
  \caption{A diagram outlining the relationship between the CMSPlugin class and the CMSPluginManager class.}
\label{fig:PluginClassDiagram}
\end{figure}


\subsubsection{CMSPlugin}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSPlugin \req{3.6.1}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSPlugin.\\ \hline
Name & String & The CMSPlugin's publically-visible name on the CMS.\\ \hline
Assembly & Assembly & The compiled code/binary that this Plugin points to.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSPluginManager}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSPlugin \req{3.6.1}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSPluginManager.\\ \hline
Name & String & The CMSPluginManager's publically-visible name on the CMS.\\ \hline
Plugins & CMSPlugin[] & A list of plugins available to the CMS.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{DeletePlugin(String name)} \\
\hline
Input & name: The name of the CMSPlugin.\hbreak
Output & Deletes the named plugin.\\ \hline
Description & Plugin management.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{RegisterPlugin(String name)} \\
\hline
Input & name: The name of the CMSPlugin.\hbreak
Output & Adds the CMSPlugin to Plugins.\\ \hline
Description & Plugin management.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{ScanPluginDirectory()} \\
\hline
Input & Void\hbreak
Output & Adds all Plugins in the CMS' Plugin directory to the CMS, allowing them to execute.\\ \hline
Description & Plugin management.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSRoleBuilder}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSRoleBuilder \req{3.2.2, 3.2.4}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSRoleBuilder.\\ \hline
Name & String & The CMSRoleBuilder's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSSecurityDataLayer}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSSecurityDataLayer} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSRoleBuilder.\\ \hline
Name & String & The CMSSecurityDataLayer's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsection{CMS Display Components}

\subsubsection{Display}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{Display \req{3.4.1, 3.4.5}} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the Display.\\ \hline
Name & String & The Display's publically-visible name on the CMS.\\ \hline
Location & String & The CMS-relative location of the Display on the local file system.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSStyleManager}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSStyleManager} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSStyleManager.\\ \hline
Name & String & The CMSStyleManager's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSTheme}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSTheme} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSTheme.\\ \hline
Name & String & The CMSTheme's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSThemer}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSThemer} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSTheme.\\ \hline
Name & String & The CMSThemer's publically-visible name on the CMS.\\ \hline
CurrentTheme & CMSTheme & The CMSTheme currently used when webpage creation is executed.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{Aggregate(Display[ ] components) \req{3.4.5}} \\
\hline
Input & components: Individual Displays to be aggregated under the current Theme.\hbreak
Output & A valid Web Page containing the visual representation of each Display under the current Theme.\hbreak
Description & Aggregation of Content, Display, and Theme into a Web Page.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSDisplayManager}
Holds control over the list of Displays available to the CMS when creating visual representations of Content.
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSDisplayManager} \\
\hline
Name & Type & Description\\ \hline \hline
Directory & String & A CMS-relative path to the Display file folders.\\ \hline
\end{tabular}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{GetDisplay(String name)} \\
\hline
Input & name: A Display's name.\hbreak
Output & A Display object named ``name''.\hbreak
Description & Retrieval of a Display.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSPage}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSPage} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSPage.\\ \hline
Name & String & The CMSPage's publically-visible name on the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSPageBuilder}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSPageBuilder} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSPageBuilder.\\ \hline
Name & String & The CMSPageBuilder's publically-visible name on the CMS.\\ \hline
Text & String & The page text loaded by the CMSPageBuilder for WYSIWYG editing.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{LoadPage(Page P)} \\
\hline
Input & P: A CMSPage to be edited.\hbreak
Output & Displays the selected Page for editing.\\ \hline
Description & Fufills \req{3.4.4}.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{WritePage()} \\
\hline
Input & Void\hbreak
Output & Writes the page contained in the Builder to the local filesystem.\\ \hline
Description & Fufills \req{3.4.4}.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsection{Administrative}

\subsubsection{CMSInternationalizer}
If the CMS is able to handle multiple display languages at the core level, it may do so after executing SetLanaguage.\newline
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSInternationalizer} \\
\hline
Name & Type & Description\\ \hline \hline
ID & long & A unique identifier for the CMSInternationalizer.\\ \hline
Name & String & The CMSInternationalizer's publically-visible name on the CMS.\\ \hline
Language & String & The client's browser language, as detected by the CMS.\hbreak
CanSpeakLanguage & bool & Whether the CMS is capable of rendering content in the client's language.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetLanguage(String Language)} \\
\hline
Input & Language: The ISO-639.3 3-letter representation of a language.\hbreak
Output & Will begin outputting system dialog in the selected language, or throw an exception.\\ \hline
Description & Triggers any language transitions within the CMS.\\ \hline
\end{tabular}
\linebreak
\vspace{2em}

\subsubsection{CMSMain}
\begin{tabular}{ | c || c | l |} 
\hline
\multicolumn{3}{|c|}{CMSMain} \\
\hline
Name & Type & Description\\ \hline \hline
DManager & CMSDisplayManager & The Display Manager for this CMS instance.\hbreak
DbLayer & CMSDbDataLayer & The Data Layer.\hbreak
Plugins & CMSPluginManager & The Plugins.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{CreatePage(Content c)} \\
\hline
Input & c: A piece of Content.\hbreak
Output & A valid webpage, in textual format.\hbreak
Description & Basic action to create a webpage for the CMS.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{AddUser(String name, String pass)} \\
\hline
Input & name, pass: A name-password pair.\hbreak
Output & Uses internal calls to add the User and secure it with the password.\hbreak
Description & Basic action to add a User.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{RemoveUser(String name)} \\
\hline
Input & name: A User's name.\hbreak
Output & The User is disabled for access.\hbreak
Description & Basic action to cease the usage of a User.\hbreak
\end{tabular}
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{DataBind(Void)} \\
\hline
Input & Void\hbreak
Output & Allows CMS controls to recieve and utilize data from the Data Layer.\hbreak
Description & Overridden .NET Framework method.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{HasPermission(long CID, long UID)} \\
\hline
Input & CID/UID: References to a Content/Content Type and a User(Type).\hbreak
Output & True if the User UID has permission to view Content CID, false otherwise.\hbreak
Description & Permission system.\hbreak
\end{tabular}
\linebreak
\vspace{2em}

\begin{tabular}{ | c || l |} 
\hline
\multicolumn{2}{|c|}{SetPermission(long CID, long UID, boolean canAccess)} \\
\hline
Input & CID/UID/canAccess: References to a Content(Type), User(Type), access param.\hbreak
Output & Sets the access ability of User(Type) UID to Content(Type) CID to canAccess.\hbreak
Description & Permission system.\hbreak
\end{tabular}
\vspace{2em}
